/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package nl.hanze.shoestring.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author alex
 */
@Entity
@Table(name = "planning")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Planning.findAll", query = "SELECT p FROM Planning p"),
    @NamedQuery(name = "Planning.findById", query = "SELECT p FROM Planning p WHERE p.id = :id"),
    @NamedQuery(name = "Planning.findByBedrag", query = "SELECT p FROM Planning p WHERE p.bedrag = :bedrag"),
    @NamedQuery(name = "Planning.findByDatumVan", query = "SELECT p FROM Planning p WHERE p.datumVan = :datumVan"),
    @NamedQuery(name = "Planning.findByDatumTot", query = "SELECT p FROM Planning p WHERE p.datumTot = :datumTot"),
    @NamedQuery(name = "Planning.findByAantalMinimum", query = "SELECT p FROM Planning p WHERE p.aantalMinimum = :aantalMinimum"),
    @NamedQuery(name = "Planning.findByAantalMaximum", query = "SELECT p FROM Planning p WHERE p.aantalMaximum = :aantalMaximum"),
    @NamedQuery(name = "Planning.findByminimumLeeftijd", query = "SELECT p FROM Planning p WHERE p.minimumLeeftijd = :minimumLeeftijd"),
    @NamedQuery(name = "Planning.findBymaximumLeeftijd", query = "SELECT p FROM Planning p WHERE p.maximumLeeftijd = :maximumLeeftijd")})
public class Planning implements Serializable {
	@Basic(optional = false)
    @NotNull
    @Column(name = "datum_van")
    @Temporal(TemporalType.TIMESTAMP)
	private Date datumVan;
	@Basic(optional = false)
    @NotNull
    @Column(name = "datum_tot")
    @Temporal(TemporalType.TIMESTAMP)
	private Date datumTot;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Column(name = "bedrag")
    private float bedrag;
    @Basic(optional = false)
    @NotNull
    @Column(name = "aantal_minimum")
    private int aantalMinimum;
    @Basic(optional = false)
    @NotNull
    @Column(name = "aantal_maximum")
    private int aantalMaximum;
    @Basic(optional = false)
    @NotNull
    @Column(name = "min_leeftijd")
    private int minimumLeeftijd;
    @Basic(optional = false)
    @NotNull
    @Column(name = "max_leeftijd")
    private int maximumLeeftijd;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "planningId")
    private List<Reservering> reserveringList;
    @JoinColumn(name = "reis_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Reis reisId;
    @JoinColumn(name = "gids_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Medewerker gidsId;

    public Planning() {
    }

    public Planning(Integer id) {
        this.id = id;
    }

    public Planning(Integer id, float bedrag, Date datumVan, Date datumTot, int aantalMinimum, int aantalMaximum, int minimumLeeftijd, int maximumLeeftijd) {
        this.id = id;
        this.bedrag = bedrag;
        this.datumVan = datumVan;
        this.datumTot = datumTot;
        this.aantalMinimum = aantalMinimum;
        this.aantalMaximum = aantalMaximum;
        this.minimumLeeftijd = minimumLeeftijd;
        this.maximumLeeftijd = maximumLeeftijd;
        
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public float getBedrag() {
        return bedrag;
    }

    public void setBedrag(float bedrag) {
        this.bedrag = bedrag;
    }

    public Date getDatumVan() {
        return datumVan;
    }

    public void setDatumVan(Date datumVan) {
        this.datumVan = datumVan;
    }

    public Date getDatumTot() {
        return datumTot;
    }

    public void setDatumTot(Date datumTot) {
        this.datumTot = datumTot;
    }

    public int getAantalMinimum() {
        return aantalMinimum;
    }

    public void setAantalMinimum(int aantalMinimum) {
        this.aantalMinimum = aantalMinimum;
    }

    public int getAantalMaximum() {
        return aantalMaximum;
    }

    public void setAantalMaximum(int aantalMaximum) {
        this.aantalMaximum = aantalMaximum;
    }
    
    public int getMaximumLeeftijd() {
        return maximumLeeftijd;
    }

    public void setMaximumLeeftijd(int maximumLeeftijd) {
        this.maximumLeeftijd = maximumLeeftijd;
    }

    public int getMinimumLeeftijd() {
        return minimumLeeftijd;
    }

    public void setMinimumLeeftijd(int minimumLeeftijd) {
        this.minimumLeeftijd = minimumLeeftijd;
    }

    @XmlTransient
    public List<Reservering> getReserveringList() {
        return reserveringList;
    }

    public void setReserveringList(List<Reservering> reserveringList) {
        this.reserveringList = reserveringList;
    }

    public Reis getReisId() {
        return reisId;
    }

    public void setReisId(Reis reisId) {
        this.reisId = reisId;
    }

    public Medewerker getGidsId() {
        return gidsId;
    }

    public void setGidsId(Medewerker gidsId) {
        this.gidsId = gidsId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Planning)) {
            return false;
        }
        Planning other = (Planning) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return getReisId().getNaam();
    }
    
}
